package br.com.minhasfinancas.fw.interfaces;

import java.util.List;
import java.util.Map;

public interface CrudManager<E,ID> {
	
	/**
	 * Modifica uma entidade.
	 * 
	 * @param entity
	 *            Entidade a ser modificada.
	 */
	public void alterar(E entity);

	/**
	 * Exclui a entidade que possui da identificação especificada no atributo
	 * id.
	 * 
	 * @param id
	 *            Id da entidade a ser excluida.
	 */
	public void excluir(ID id);

	public List<E> findByNamedQuery(String namedQueryName);

	public List<E> findByNamedQuery(String namedQueryName, Map<String, Object> parameters);

	public E findOneByNamedQuery(final String namedQueryName, ID id);

	public E findOneByNamedQuery(String namedQueryName, Map<String, Object> parameters);

	public List<E> findWithNamedQueryPaginated(String namedQueryName, int firstResult, int resultLimit);

	public List<E> findWithNamedQueryPaginated(String namedQueryName, Map<String, Object> parameters, int firstResult, int resultLimit);

	/**
	 * Persiste uma nova entidade.
	 * 
	 * @param entity
	 *            Nova entidade a ser persistida.
	 * @return Identificação da nova entidade persistida. Caso a identificação
	 *         da entidade seja gerada pelo dispositivo de persInstância, este
	 *         valor será gerado automaticamente.
	 * @throws Exception 
	 */
	public void inserir(E entity);

	/**
	 * Consulta uma entidade pela sua identificação �nica.
	 * 
	 * @param id
	 *            Identificação da entidade.
	 * @return Entidade identificada por id.
	 */
	public E obter(ID id);

	/**
	 * Obtém uma listagem com todas as entidades persistidas.
	 * 
	 * @return Listagem com as entidades.
	 */
	public List<E> obterTodos();


}
